package songZhao.MinaDemo.SimpleDemo;

import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
/**
 * 对session的各种状态,包括数据,进行处理和反馈.
 * 相当与服务器的动作指南. 真正处理业务的地方.
 * 各种方法的名字已经说名这个方法的用途了.不多说了.
 * 
 * 这个类继承了一个adapter,
 * adapter其实就是实现了接口的所有方法的空类.方便大家继承接口而不用实现所有的方法.
 * @author agui415
 *
 */
public class ServerHandler extends IoHandlerAdapter{

	/**
	 * cause 其实就是个异常.
	 */
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		System.out.println("exceptionCaught:"+cause.getMessage());
	}

	@Override
	public void inputClosed(IoSession session) throws Exception {
		System.out.println("inputClosed");
	}

	@SuppressWarnings("deprecation")
	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		String msg = (String) message;
		Date date = new Date();
		System.out.println("messageReceived:" + msg);
		session.write(date);
		
		/**
		 * 这种session的方式是一种长连接的方式.
		 * 如果关闭操作出现在messageSent方法中,那么服务器就像http server一样来
		 * 处理短链接请求了. 服务器发送玩数据之后就会主动将session关闭.
		 */
		
		if (msg.equals(new String("exit"))) {
			session.close();
		}
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		System.out.println("messageSent");
		/**
		 * 如果在这里写session关闭的方法,那么数据在发送给客户端后,就会终端session
		 */
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("sessionClosed");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("sessionCreated");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		System.out.println("sessionIdle");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("sessionOpened");
		System.out.println("Connected from :"+session.getRemoteAddress());
	}
	
}
